#include "server_Enemigo.h"
#include "server_IOcupante.h"
#include "server_Bomberman.h"
#include "server_RandomGenerator.h"
#include "server_Personaje.h"

Enemigo::Enemigo() : Personaje() {
    RandomGenerator generador;
    this->movimientosParaCambiarDeDireccion = generador.generate(1, 5);
    direccion = "ninguna";
    direcciones = {"arriba", "abajo", "izquierda", "derecha"};
    escondido = false;
}

Enemigo::~Enemigo() {
}

int Enemigo::getPuntosOtorgados() {
    return puntosOtorgados;
}

bool Enemigo::estaEscondido() {
    return escondido;
}

void Enemigo::disminuirExplosionesRestantes() {
    explosionesRestantes--;
    if (explosionesRestantes <= 0) {
        vive = false;
    }
}

void Enemigo::colisionarConBombaPlanta() {
    disminuirExplosionesRestantes();
}

void Enemigo::colisionarCon(IOcupante* ocupante) {
    ocupante->colisionarConEnemigo();
}

void Enemigo::recibirExplosion() {
    if (escondido) {
        escondido = false;
        return;
    }
    this->disminuirExplosionesRestantes();
}

void Enemigo::colisionarConBomberman(IOcupante* bomberman) {
    Bomberman* personaje = dynamic_cast<Bomberman*> (bomberman);
    personaje->colisionarConZombie();
}

void Enemigo::setDireccion() {
    // Con la siguiente linea y haciendo que este metodo no sea virtual
    // se puede probar el metodo actualizar de nivel con las pruebas unitarias.
    //direccion = "ninguna";  
}

void Enemigo::esconder() {
    this->escondido = true;
}

void Enemigo::mostrar() {
    this->escondido = false;
}